package org.ysu.shoeShopping.service.impl;

import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.ysu.shoeShopping.dao.BrandsDao;
import org.ysu.shoeShopping.entity.Brands;
import org.ysu.shoeShopping.service.BrandsService;

import javax.annotation.Resource;
import java.util.List;

/**
 * 鞋子品牌业务服务实现类
 * 实现品牌相关的具体业务逻辑，包括：
 * - 品牌数据的增删改查操作
 * - 品牌状态管理（上线/下线）
 * - 品牌分页查询和数据统计
 *
 * @author makejava
 * @since 2025-09-13 16:59:06
 */
@Service("brandsService")
public class BrandsServiceImpl implements BrandsService
{
    @Resource
    private BrandsDao brandsDao;

    /**
     * 通过ID查询单条数据
     *
     * @param bid 主键
     * @return 实例对象
     */
    @Override
    public Brands queryById(Integer bid) {
        return this.brandsDao.queryById(bid);
    }

    /**
     * 分页查询
     *
     * @param brands 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    @Override
    public Page<Brands> queryByPage(Brands brands, PageRequest pageRequest) {
        long total = this.brandsDao.count(brands);
        return new PageImpl<>(this.brandsDao.queryAllByLimit(brands, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param brands 实例对象
     * @return 实例对象
     */
    @Override
    public Brands insert(Brands brands) {
        this.brandsDao.insert(brands);
        return brands;
    }

    /**
     * 修改数据
     *
     * @param brands 实例对象
     * @return 实例对象
     */
    @Override
    public Brands update(Brands brands) {
        this.brandsDao.update(brands);
        return this.queryById(brands.getBid());
    }

    /**
     * 通过主键删除数据
     *
     * @param bid 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer bid) {
        return this.brandsDao.deleteById(bid) > 0;
    }

    /**
     * 获取所有启用的品牌
     *
     * @return 启用品牌列表
     */
    @Override
    public List<Brands> getAllActiveBrands() {
        return this.brandsDao.getAllActiveBrands();
    }

    @Override
    public List<Brands> findAllBrands()
    {
        return this.brandsDao.findAllBrands();
    }
}
